#include "parser.h"

#include <QUrl>

Parser::Parser()
{
	regexp.insert("linux",  QRegExp(tr("<tr>.*прыще|питух|красноглаз|pimple"), Qt::CaseInsensitive));
	regexp.insert("windows",  QRegExp(tr("<tr>.*акне|спермо|в[ие]ндо"), Qt::CaseInsensitive));
	regexp.insert("macos",  QRegExp(tr("<tr>.*говно[её]|ябло"), Qt::CaseInsensitive));
	regexp.insert("firefox",  QRegExp(tr("<tr>.*лисо|фурри"), Qt::CaseInsensitive));
	regexp.insert("opera",  QRegExp(tr("<tr>.*операс|опера[еёб]"), Qt::CaseInsensitive));
	regexp.insert("chrome",  QRegExp(tr("<tr>.*хромич|хромо[неёб]"), Qt::CaseInsensitive));
	regexp.insert("rooster", QRegExp(tr("<tr>.*раздался пронзительный|со стороны параши|предстоит тяжёлая ночь|п[еи]тух|п[еи]туш|сгущ[её]н"), Qt::CaseInsensitive));
	regexp.insert("grivo",  QRegExp(tr("<tr>.*грив|гитар[оа]|патл[аы]|волос|корол|manowa|п[оа][ву][еэ]р|комби|басу|г[ао]вн"), Qt::CaseInsensitive));
	regexp.insert("obebo",  QRegExp(tr("<tr>.*дидж|электр[оа]|объебо|драм|нейроф|транс|пс[аи]|сайко|арм[иеэ]н|т[ие]ст[ао]"), Qt::CaseInsensitive));
	regexp.insert("hips",  QRegExp(tr("<tr>.*indie|хип[сп]|инди|hope|питч|pitch"), Qt::CaseInsensitive));

    connect(&manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(read()));
}

void Parser::setUrl(QUrl url)
{
    QRegExp rx("\\.html", Qt::CaseInsensitive);
    if (rx.indexIn(url.toString()) == -1)
    {
        url = QUrl(url.toString() + "/");
    }
    request.setUrl(url);
}

void Parser::getPage()
{
    reply = manager.get(request);
    connect(reply, SIGNAL(finished()), this, SLOT(parse()));
}

void Parser::read()
{
    page = tr(reply->readAll());
}

void Parser::parse()
{
    if (reply->error() == QNetworkReply::NoError)
    {
        QMapIterator <QString, QRegExp> i (regexp);
        while (i.hasNext())
        {
            i.next();
            int pos = 0, current = 0;
            while ((pos = i.value().indexIn(page, pos)) != -1)
            {
                ++current;
                pos += i.value().matchedLength();
            }
            count.insert(i.key(), current);
        }
    }
    emit countFinished();
}

QMap <QString, int> Parser::getCount()
{
    return count;
}

QNetworkReply *Parser::getReply()
{
    return reply;
}

